home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / xen / xencomm.h < prev   
Encoding:
C/C++ Source or Header  |  2008-12-24  |  2.5 KB  |  78 lines

  1. /*
  2.  * This program is free software; you can redistribute it and/or modify
  3.  * it under the terms of the GNU General Public License as published by
  4.  * the Free Software Foundation; either version 2 of the License, or
  5.  * (at your option) any later version.
  6.  *
  7.  * This program is distributed in the hope that it will be useful,
  8.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  9.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  10.  * GNU General Public License for more details.
  11.  *
  12.  * You should have received a copy of the GNU General Public License
  13.  * along with this program; if not, write to the Free Software
  14.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  15.  *
  16.  * Copyright (C) IBM Corp. 2006
  17.  *
  18.  * Authors: Hollis Blanchard <hollisb@us.ibm.com>
  19.  *          Jerone Young <jyoung5@us.ibm.com>
  20.  */
  21.  
  22. #ifndef _LINUX_XENCOMM_H_
  23. #define _LINUX_XENCOMM_H_
  24.  
  25. #include <xen/interface/xencomm.h>
  26.  
  27. #define XENCOMM_MINI_ADDRS 3
  28. struct xencomm_mini {
  29.     struct xencomm_desc _desc;
  30.     uint64_t address[XENCOMM_MINI_ADDRS];
  31. };
  32.  
  33. /* To avoid additionnal virt to phys conversion, an opaque structure is
  34.    presented.  */
  35. struct xencomm_handle;
  36.  
  37. extern void xencomm_free(struct xencomm_handle *desc);
  38. extern struct xencomm_handle *xencomm_map(void *ptr, unsigned long bytes);
  39. extern struct xencomm_handle *__xencomm_map_no_alloc(void *ptr,
  40.             unsigned long bytes,  struct xencomm_mini *xc_area);
  41.  
  42. #if 0
  43. #define XENCOMM_MINI_ALIGNED(xc_desc, n)                \
  44.     struct xencomm_mini xc_desc ## _base[(n)]            \
  45.     __attribute__((__aligned__(sizeof(struct xencomm_mini))));    \
  46.     struct xencomm_mini *xc_desc = &xc_desc ## _base[0];
  47. #else
  48. /*
  49.  * gcc bug workaround:
  50.  * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16660
  51.  * gcc doesn't handle properly stack variable with
  52.  * __attribute__((__align__(sizeof(struct xencomm_mini))))
  53.  */
  54. #define XENCOMM_MINI_ALIGNED(xc_desc, n)                \
  55.     unsigned char xc_desc ## _base[((n) + 1 ) *            \
  56.                        sizeof(struct xencomm_mini)];    \
  57.     struct xencomm_mini *xc_desc = (struct xencomm_mini *)        \
  58.         ((unsigned long)xc_desc ## _base +            \
  59.          (sizeof(struct xencomm_mini) -                \
  60.           ((unsigned long)xc_desc ## _base) %            \
  61.           sizeof(struct xencomm_mini)));
  62. #endif
  63. #define xencomm_map_no_alloc(ptr, bytes)            \
  64.     ({ XENCOMM_MINI_ALIGNED(xc_desc, 1);            \
  65.         __xencomm_map_no_alloc(ptr, bytes, xc_desc); })
  66.  
  67. /* provided by architecture code: */
  68. extern unsigned long xencomm_vtop(unsigned long vaddr);
  69.  
  70. static inline void *xencomm_pa(void *ptr)
  71. {
  72.     return (void *)xencomm_vtop((unsigned long)ptr);
  73. }
  74.  
  75. #define xen_guest_handle(hnd)  ((hnd).p)
  76.  
  77. #endif /* _LINUX_XENCOMM_H_ */
  78.